# -*- coding: utf-8 -*-

class Foo:
    # 封装属性
    __x = 11
    __y = 22
    def get_x(self):
        return self.__x

# 1. __开头的属性到底如何实现的隐藏?
# 执行__dict__()我们能发现封装的属性是以_类名_属性名存储
print(Foo.__dict__)
# __开头的属性实现的隐藏仅仅只是一种语法意义上的变形,并不会真的限制类外部的访问
print(Foo._Foo__x)  # 所以这样是可以访问到了，但我们不推荐这么做

# 2. 那如何实现的对外隐藏,对内不隐藏？
# 调用接口
print(Foo().get_x())